/********************************************************************************
    Author :
********************************************************************************/

/********************************************************************************
    Include Files :
********************************************************************************/
#include "extern.h"
    #include "sdk_project_config.h"

#include "alloc.h"
    #include "Gpio.h"

/********************************************************************************
    Defination :
********************************************************************************/

/********************************************************************************
    Comment : The PORT of Light LED
********************************************************************************/
#define GREEN_PORT      PTD
#define BLUE_PORT       PTD
#define YELLOW_PORT     PTD
#define RED_PORT        PTD
/********************************************************************************
    Comment : The PIN of Light LED
********************************************************************************/
#define GREEN_PIN       (uint8)16
#define BLUE_PIN        (uint8)0
#define YELLOW_PIN      (uint8)1
#define RED_PIN         (uint8)15
/********************************************************************************
    Comment : The PORT of Button
********************************************************************************/
#define KEY1_PORT PTC
#define KEY2_PORT PTC
#define KEY3_PORT PTB
/********************************************************************************
    Comment : The PIN of Button
********************************************************************************/
#define KEY1_PIN (uint8)12
#define KEY2_PIN (uint8)13
#define KEY3_PIN (uint8)2

/********************************************************************************
    Type name :
********************************************************************************/

/********************************************************************************
    Comment : The description of type name
********************************************************************************/

/********************************************************************************
    Private variables :
********************************************************************************/

/********************************************************************************
    Comment : The description of private variables
********************************************************************************/

/********************************************************************************
    Private function declaration :
********************************************************************************/

/********************************************************************************
    Public function :
********************************************************************************/

/********************************************************************************
    Description :
        The initial function  of GPIO
********************************************************************************/
PUBLIC FUNC(void,GPIO_CODE) Gpio_vidInitMainFunction(void)
{
    /* Initialize clock module */
	CLOCK_DRV_Init(&clockMan1_InitConfig0);

	CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT,
			g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
	CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);

    /* Initialize pins */
	PINS_DRV_Init(NUM_OF_CONFIGURED_PINS0, g_pin_mux_InitConfigArr0);
}

/********************************************************************************
    Description :
        Check the I/O is on or not
********************************************************************************/
PUBLIC FUNC(boolean,GPIO_CODE) Gpio_bIsOn(enuReadPin enuPinType)
{
	boolean bIsOn = FALSE;
	switch(enuPinType)
	{
		case ENU_READ_SELECT_LED:
			bIsOn =  (PINS_DRV_ReadPins(BLUE_PORT) >> BLUE_PIN) & 0x01;
			break;
		case ENU_READ_BUTTON_KEY1:
			bIsOn =  (PINS_DRV_ReadPins(KEY1_PORT) >> KEY1_PIN) & 0x01;
			break;
		case ENU_READ_BUTTON_KEY2:
			bIsOn =  (PINS_DRV_ReadPins(KEY2_PORT) >> KEY2_PIN) & 0x01;
			break;
		case ENU_READ_BUTTON_KEY3:
			bIsOn =  (PINS_DRV_ReadPins(KEY3_PORT) >> KEY3_PIN) & 0x01;
			break;
        default:
            break;
	}
	return bIsOn;
}

/********************************************************************************
    Description :
        Pull I/O up
********************************************************************************/
PUBLIC FUNC(void,GPIO_CODE) Gpio_vidPullUpPin(enuWritePin enuPinType)
{
	switch(enuPinType)
	{
		case ENU_WRITE_SELECT_LED:
			PINS_DRV_WritePin(BLUE_PORT,BLUE_PIN,PIN_HIGH);
			break;
        default:
            break;
	}
}

/********************************************************************************
    Description :
        Pull I/O down
********************************************************************************/
PUBLIC FUNC(void,GPIO_CODE) Gpio_vidPullDownPin(enuWritePin enuPinType)
{
	switch(enuPinType)
	{
		case ENU_WRITE_SELECT_LED:
			PINS_DRV_WritePin(BLUE_PORT,BLUE_PIN,PIN_LOW);
			break;
        default:
            break;
	}
}
